package ucla.axelia.controlador.servicios;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;

import ucla.axelia.controlador.interfaces.IServicioAdministracionReconocimiento;
import ucla.axelia.modelo.dao.ServicioReconocimientoDAO;
import ucla.axelia.modelo.dao.ServicioTipoActividadDAO;
import ucla.axelia.modelo.data.Reconocimiento;
import ucla.axelia.modelo.data.TipoActividad;

import com.obelisco.modelo.data.DataGenerica;

public class ServicioAdministracionReconocimiento implements IServicioAdministracionReconocimiento{
	
	private ServicioReconocimientoDAO servicioReconocimientoDAO;
	private ServicioTipoActividadDAO servicioTipoActividadDAO;
	
	/*public List<Reconocimiento> buscarReconocimientoPorCriterios(Map criterios) {	
		Session session = this.servicioReconocimientoDAO.getSessionFactory().getCurrentSession();							
		String sentencia = "Select reconocimiento " +
						   "from Reconocimiento reconocimiento " +
						   "where reconocimiento.estado = :estado "; 
		for (int i=0; i<criterios.size(); i++){
			sentencia += "and upper(reconocimiento."+(String)criterios.keySet().toArray()[i]+") like '%"+((String)criterios.get(criterios.keySet().toArray()[i])).toUpperCase()+"%' ";
		}
		sentencia += "order by cast(reconocimiento.idReconocimiento as integer)";
		Query qry = session.createQuery(sentencia);		
		qry.setString("estado", DataGenerica.DATA_ACTIVO);
		List<Reconocimiento> reconocimientos = qry.list();
		return reconocimientos;
	}*/

	public List<Reconocimiento> buscarReconocimientos() {
		List<Order> orden = new ArrayList<Order>();
		orden.add(Order.asc("nombreReconocimiento"));
		return servicioReconocimientoDAO.buscarTodos(DataGenerica.DATA_ACTIVO, orden);
	}
	
	public List<TipoActividad> buscarTipoActividades() {
		List<Order> orden = new ArrayList<Order>();
		orden.add(Order.asc("codigoTipoActividad"));
		return servicioTipoActividadDAO.buscarTodos(DataGenerica.DATA_ACTIVO, orden);
	}

	public void eliminarReconocimiento(Reconocimiento reconocimiento) {
		servicioReconocimientoDAO.eliminarFisicamente(reconocimiento);
	}

	public void guardarReconocimiento(Reconocimiento reconocimiento) {
		servicioReconocimientoDAO.guardar(reconocimiento);
	}

	public ServicioReconocimientoDAO getServicioReconocimientoDAO() {
		return servicioReconocimientoDAO;
	}

	public void setServicioReconocimientoDAO(ServicioReconocimientoDAO servicioReconocimientoDAO) {
		this.servicioReconocimientoDAO = servicioReconocimientoDAO;
	}

	public ServicioTipoActividadDAO getServicioTipoActividadDAO() {
		return servicioTipoActividadDAO;
	}

	public void setServicioTipoActividadDAO(
			ServicioTipoActividadDAO servicioTipoActividadDAO) {
		this.servicioTipoActividadDAO = servicioTipoActividadDAO;
	}

}
